package servlet;

import java.io.IOException;
import java.io.InputStream;

/**
 * 根据inputStream输入流进行Request对象的封装
 */
public class Request {

    private String method; //请求类型，GET/POST

    private String url; //请求路径  /,/index.html

    private InputStream inputStream; //根据输入流进行Request对象的封装


    public String getMethod() {
        return method;
    }

    public void setMethod(String method) {
        this.method = method;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public InputStream getInputStream() {
        return inputStream;
    }

    public void setInputStream(InputStream inputStream) {
        this.inputStream = inputStream;
    }

    public Request() {

    }


    public Request(InputStream inputStream) throws IOException {
        this.inputStream = inputStream;

//        byte[] bytes = new byte[1024];   //直接按照1024进行初始化的，这样不好
        //从输入流中获取请求信息
        int count = 0;
        //必须这样while操作，因为你调用available()方法时，对发发送的数据可能还没有到达，你得到的count是0。
        while (count == 0){
            count = inputStream.available();//获取字节长度 这个方法可以在读写操作前先得知数据流里有多少个字节可以读取
        }

        byte[] bytes = new byte[count];
        //将输入流读到字节数组中
        inputStream.read(bytes);
        String requestHeader = new String(bytes);
        String firstLinStr = requestHeader.split("\\n")[0];  // GET / HTTP/1.1
        this.method = firstLinStr.split(" ")[0];  // GET
        this.url = firstLinStr.split(" ")[1];    //  /
    }
}
